"""
停车场数据分析系统主程序
"""

import os
import sys
import logging
import argparse
import datetime
from database import test_connection
from data_analysis import (
    get_parking_stats, 
    analyze_peak_hours, 
    analyze_parking_duration, 
    analyze_device_errors,
    predict_traffic
)
from visualization import (
    generate_daily_report,
    generate_weekly_report,
    generate_monthly_report
)
from hardware_interface import GateController, demo_device_communication

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler("parking_analytics.log"),
        logging.StreamHandler(sys.stdout)
    ]
)
logger = logging.getLogger('main')

def parse_arguments():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(description='停车场数据分析系统')
    
    # 创建子命令
    subparsers = parser.add_subparsers(dest='command', help='子命令')
    
    # 生成报表命令
    report_parser = subparsers.add_parser('report', help='生成报表')
    report_parser.add_argument('--type', choices=['daily', 'weekly', 'monthly'], 
                               default='daily', help='报表类型')
    report_parser.add_argument('--date', help='日期 (YYYY-MM-DD)，仅日报表使用')
    report_parser.add_argument('--end-date', help='结束日期 (YYYY-MM-DD)，仅周报表使用')
    report_parser.add_argument('--month', type=int, choices=range(1, 13),
                               help='月份 (1-12)，仅月报表使用')
    report_parser.add_argument('--year', type=int, help='年份，仅月报表使用')
    
    # 分析命令
    analysis_parser = subparsers.add_parser('analyze', help='分析数据')
    analysis_parser.add_argument('--type', choices=['peak', 'duration', 'errors', 'predict'], 
                                 required=True, help='分析类型')
    analysis_parser.add_argument('--days', type=int, default=7, 
                                 help='分析的天数')
    analysis_parser.add_argument('--parking-lot', type=int, 
                                 help='停车场ID')
    
    # 硬件接口演示命令
    hw_parser = subparsers.add_parser('hardware', help='硬件接口演示')
    hw_parser.add_argument('--demo', action='store_true', 
                           help='运行硬件接口演示')
    
    # 测试数据库连接命令
    test_parser = subparsers.add_parser('test', help='测试数据库连接')
    
    return parser.parse_args()

def run_report_command(args):
    """运行报表生成命令"""
    if args.type == 'daily':
        date = args.date if args.date else datetime.datetime.now().strftime('%Y-%m-%d')
        report_file = generate_daily_report(date=date)
        logger.info(f"日报表已生成: {report_file}")
        
    elif args.type == 'weekly':
        end_date = args.end_date if args.end_date else datetime.datetime.now().strftime('%Y-%m-%d')
        report_file = generate_weekly_report(end_date=end_date)
        logger.info(f"周报表已生成: {report_file}")
        
    elif args.type == 'monthly':
        month = args.month if args.month else datetime.datetime.now().month
        year = args.year if args.year else datetime.datetime.now().year
        report_file = generate_monthly_report(month=month, year=year)
        logger.info(f"月报表已生成: {report_file}")

def run_analysis_command(args):
    """运行数据分析命令"""
    if args.type == 'peak':
        result = analyze_peak_hours(days=args.days, parking_lot_id=args.parking_lot)
        logger.info(f"高峰时段分析完成: {len(result)} 条记录")
        
    elif args.type == 'duration':
        result = analyze_parking_duration(days=args.days, parking_lot_id=args.parking_lot)
        logger.info(f"停车时长分析完成: {len(result)} 条记录")
        
    elif args.type == 'errors':
        result = analyze_device_errors(days=args.days)
        logger.info(f"设备故障分析完成: {len(result)} 条记录")
        
    elif args.type == 'predict':
        result = predict_traffic(days_to_predict=7, historical_days=args.days, 
                                parking_lot_id=args.parking_lot)
        logger.info(f"车流量预测完成: {len(result)} 条记录")

def main():
    """主函数"""
    print("""
    =======================================================
                停车场数据分析系统
    -------------------------------------------------------
    支持功能:
    1. 停车场车流量统计与分析
    2. 高峰时段识别与预测
    3. 停车时长分布分析
    4. 设备故障分析
    5. 报表生成 (日报、周报、月报)
    6. 道闸设备通信接口
    =======================================================
    """)
    
    args = parse_arguments()
    
    # 根据命令执行相应功能
    if args.command == 'report':
        run_report_command(args)
        
    elif args.command == 'analyze':
        run_analysis_command(args)
        
    elif args.command == 'hardware':
        if args.demo:
            logger.info("运行硬件接口演示")
            demo_device_communication()
            
    elif args.command == 'test':
        logger.info("测试数据库连接...")
        success, result = test_connection()
        if success:
            logger.info(f"数据库连接成功! SQL Server版本: {result}")
        else:
            logger.error(f"数据库连接失败: {result}")
            
    else:
        # 默认操作：如果没有指定命令，显示帮助
        print("请指定要执行的命令。使用 --help 查看帮助。")
        print("\n示例:")
        print("  python main.py report --type daily     # 生成今日报表")
        print("  python main.py analyze --type peak     # 分析高峰时段")
        print("  python main.py hardware --demo         # 运行硬件接口演示")
        print("  python main.py test                    # 测试数据库连接")

if __name__ == "__main__":
    main() 